#include "dri_beep.h"
#include "dri_led.h"
#include "dri_led1.h"
#include "dri_led2.h"
#include "dri_led3.h"
#include "dri_systick.h"
#include "dri_key.h"
#include "dri_key1.h"
#include "dri_key2.h"
#include "dri_key3.h"
#include "dri_fan.h"
#include "dri_exti.h"   
#include "dri_usart.h"
#include "dri_time.h"
#include <stdio.h>
#include "dri_iic.h"

// 风扇控制相关变量
static uint8_t fan_speed_mode = 0; // 0:关闭, 1:低速, 2:中速, 3:高速
static uint16_t fan_pwm_value = 0;  // PWM占空比值

// 按键状态变量
static uint8_t key1_sta = 0;
static uint8_t key2_sta = 0;
static uint8_t key3_sta = 0;

// 设置风扇PWM占空比函数
void Set_Fan_PWM(uint16_t duty)
{
    // 计算脉冲值 (假设TIM13的周期为5000)
    uint16_t pulse = (duty * 5000) / 10000;
    TIM_SetCompare1(TIM13, pulse);
    fan_pwm_value = duty; // 保存当前占空比值
}

int main(void)
{
    // 初始化外设
    dri_exti9_init();
    dri_iic_init();
    dri_beep_init();
    dri_key_init();
    dri_led1_init();
    dri_led2_init();
    dri_led3_init();
    dri_key1_init();
    dri_key2_init();
    dri_key3_init();
    dri_systick_init(168);
    dri_fan_init();
    dri_led_init();
    dri_usart6_init();
    dri_time13_init();
    
    printf("System Initialized\r\n");
    
    // 初始关闭风扇
    Set_Fan_PWM(0);
    
    while(1)
    {
        // 按键1控制风扇开关/模式切换
        if(dri_get_key1())
        {
            dri_systick_ms(20); // 简单防抖
            if(dri_get_key1()) // 再次检测确认按键按下
            {
                fan_speed_mode = (fan_speed_mode + 1) % 4; // 循环切换0-3
                
                // 根据模式设置PWM
                switch(fan_speed_mode)
                {
                    case 0: // 关闭
                        Set_Fan_PWM(0);
                        printf("Fan: OFF\r\n");
                        break;
                    case 1: // 低速
                        Set_Fan_PWM(2500); // 25%占空比
                        printf("Fan: LOW Speed\r\n");
                        break;
                    case 2: // 中速
                        Set_Fan_PWM(5000); // 50%占空比
                        printf("Fan: MEDIUM Speed\r\n");
                        break;
                    case 3: // 高速
                        Set_Fan_PWM(7500); // 75%占空比
                        printf("Fan: HIGH Speed\r\n");
                        break;
                }
                
                // 等待按键释放
                while(dri_get_key1()) dri_systick_ms(10);
            }
        }
        
        // 按键2增加风速
        if(dri_get_key2())
        {
            dri_systick_ms(20); // 简单防抖
            if(dri_get_key2()) // 再次检测确认按键按下
            {
                if(fan_speed_mode > 0) // 只有风扇开启时才能调整
                {
                    // 增加PWM值，最大10000 (100%)
                    if(fan_pwm_value < 10000)
                    {
                        uint16_t new_pwm = fan_pwm_value + 500; // 每次增加5%
                        if(new_pwm > 10000) new_pwm = 10000;
                        Set_Fan_PWM(new_pwm);
                        printf("Fan Speed: %d%%\r\n", new_pwm / 100);
                    }
                }
                
                // 等待按键释放
                while(dri_get_key2()) dri_systick_ms(10);
            }
        }
        
        // 按键3减少风速
        if(dri_get_key3())
        {
            dri_systick_ms(20); // 简单防抖
            if(dri_get_key3()) // 再次检测确认按键按下
            {
                if(fan_speed_mode > 0) // 只有风扇开启时才能调整
                {
                    // 减少PWM值，最小0 (0%)
                    if(fan_pwm_value > 0)
                    {
                        uint16_t new_pwm = fan_pwm_value - 500; // 每次减少5%
                        if(new_pwm < 0) new_pwm = 0;
                        Set_Fan_PWM(new_pwm);
                        printf("Fan Speed: %d%%\r\n", new_pwm / 100);
                        
                        // 如果降低到0，则关闭风扇
                        if(new_pwm == 0)
                        {
                            fan_speed_mode = 0;
                            printf("Fan: OFF\r\n");
                        }
                    }
                }
                
                // 等待按键释放
                while(dri_get_key3()) dri_systick_ms(10);
            }
        }
        
        // 添加一小段延时，减少CPU占用
        dri_systick_ms(10);
    }
}

//#include "dri_beep.h"
//#include "dri_led.h"
//#include "dri_led1.h"
//#include "dri_led2.h"
//#include "dri_led3.h"
//#include "dri_systick.h"
//#include "dri_key.h"
//#include "dri_key1.h"
//#include "dri_key2.h"
//#include "dri_key3.h"
//#include "dri_fan.h"
//#include "dri_exti.h"   
//#include "dri_usart.h"
//#include "dri_time.h"
//#include <stdio.h>
//#include "dri_iic.h"

//static uint8_t fan_speed_mode = 0; // 0:关闭, 1:低速, 2:中速, 3:高速
//static uint16_t fan_pwm_value = 0;  // PWM占空比值
////static uint8_t key_sta=0;
////static uint8_t key1_sta=0;
////static uint8_t key2_sta=0;
////static uint8_t key3_sta=0;
////uint16_t led_pwm=0;
////uint8_t dir=0;//
//void Set_Fan_PWM(uint16_t duty)
//{
//    // 计算脉冲值 (假设TIM13的周期为5000)
//    uint16_t pulse = (duty * 5000) / 10000;
//    TIM_SetCompare1(TIM13, pulse);
//    fan_pwm_value = duty; // 保存当前占空比值
//}
//int main(void)
//{
//	//NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
//	
//	dri_exti9_init();
//	dri_iic_init();
//	dri_beep_init();
//	dri_key_init();
//	dri_led1_init();
//	dri_led2_init();
//	dri_led3_init();
//	dri_key1_init();
//	dri_key2_init();
//	dri_key3_init();
//	dri_systick_init(168);
//	dri_fan_init();
//	dri_led_init();
//	dri_usart6_init();
//	dri_time13_init();
//	printf("hello woudle\r\n");
//	 
//	Set_Fan_PWM(0);
//	//dri_beep_open();
//	
//	while(1)
//	{
//		 // 按键1控制风扇开关/模式切换
//        if(dri_get_key1())
//        {
//            dri_systick_ms(20); // 简单防抖
//            if(dri_get_key1()) // 再次检测确认按键按下
//            {
//                fan_speed_mode = (fan_speed_mode + 1) % 4; // 循环切换0-3
//                
//                // 根据模式设置PWM
//                switch(fan_speed_mode)
//                {
//                    case 0: // 关闭
//                        Set_Fan_PWM(0);
//                        printf("Fan: OFF\r\n");
//                        break;
//                    case 1: // 低速
//                        Set_Fan_PWM(2500); // 25%占空比
//                        printf("Fan: LOW Speed\r\n");
//                        break;
//                    case 2: // 中速
//                        Set_Fan_PWM(5000); // 50%占空比
//                        printf("Fan: MEDIUM Speed\r\n");
//                        break;
//                    case 3: // 高速
//                        Set_Fan_PWM(7500); // 75%占空比
//                        printf("Fan: HIGH Speed\r\n");
//                        break;
//                }
//                
//                // 等待按键释放
//                while(dri_get_key1()) dri_systick_ms(10);
//            }
//        }
//        
//        // 按键2增加风速
//        if(dri_get_key2())
//        {
//            dri_systick_ms(20); // 简单防抖
//            if(dri_get_key2()) // 再次检测确认按键按下
//            {
//                if(fan_speed_mode > 0) // 只有风扇开启时才能调整
//                {
//                    // 增加PWM值，最大10000 (100%)
//                    if(fan_pwm_value < 10000)
//                    {
//                        uint16_t new_pwm = fan_pwm_value + 500; // 每次增加5%
//                        if(new_pwm > 10000) new_pwm = 10000;
//                        Set_Fan_PWM(new_pwm);
//                        printf("Fan Speed: %d%%\r\n", new_pwm / 100);
//                    }
//                }
//                
//                // 等待按键释放
//                while(dri_get_key2()) dri_systick_ms(10);
//            }
//        }
//        
//        // 按键3减少风速
//        if(dri_get_key3())
//        {
//            dri_systick_ms(20); // 简单防抖
//            if(dri_get_key3()) // 再次检测确认按键按下
//            {
//                if(fan_speed_mode > 0) // 只有风扇开启时才能调整
//                {
//                    // 减少PWM值，最小0 (0%)
//                    if(fan_pwm_value > 0)
//                    {
//                        uint16_t new_pwm = fan_pwm_value - 500; // 每次减少5%
//                        if(new_pwm < 0) new_pwm = 0;
//                        Set_Fan_PWM(new_pwm);
//                        printf("Fan Speed: %d%%\r\n", new_pwm / 100);
//                        
//                        // 如果降低到0，则关闭风扇
//                        if(new_pwm == 0)
//                        {
//                            fan_speed_mode = 0;
//                            printf("Fan: OFF\r\n");
//                        }
//                    }
//                }
//                
//                // 等待按键释放
//                while(dri_get_key3()) dri_systick_ms(10);
//            }
//        }
//        
//        // 添加一小段延时，减少CPU占用
//        dri_systick_ms(10);
//    }
//}

///*if(dri_get_key())
//		{
//				key_sta = ~key_sta;
//		}
//		
//		if(key_sta)
//		{
//			dri_led1_open();
//			dri_systick_ms(1000);
//			dri_led1_close();
//			dri_systick_ms(1000);
//			dri_led2_open();
//			dri_systick_ms(1000);
//			dri_led2_close();
//			dri_systick_ms(1000);
//			dri_led3_open();
//			dri_systick_ms(1000);
//			dri_led3_close();
//			dri_systick_ms(1000);
//		
//		}
//		
//		else
//		{
//			dri_led1_close();
//			dri_led2_close();
//			dri_led3_close();
//		}
//		
//		if(dri_get_key1())
//		{
//			key1_sta = ~key1_sta;
//		}
//		if(key1_sta)
//		{
//			dri_beep_open();
//		}
//		else
//		{
//			dri_beep_close();
//			
//		}
//		if(dri_get_key2())
//		{
//			key2_sta = ~key2_sta;
//		}
//		if(key2_sta)
//		{
//			dri_led_open();
//		}
//		else
//		{
//			dri_led_close();
//			
//		}	
//		if(dri_get_key3())
//		{
//			key3_sta = ~key3_sta;
//		}
//		if(key3_sta)
//		{
//			dri_fan_open();
//		}
//		else
//		{
//			dri_fan_close();
//			
//		}
//*/		


